import os
import re
import glob

def extract_number_from_filename(filename):
    """
    从文件名中提取数字用于排序
    例如: a689c3cc-4dd9-4efb-9fff-a844e2329096-10.jpeg -> 10
    """
    # 使用正则表达式匹配文件名中的数字
    match = re.search(r'-(\d+)\.jpeg$', filename)
    if match:
        return int(match.group(1))
    return 0

def rename_files_to_custom_format(directory_path, prefix):
    """
    将指定目录下的文件按序号重命名为自定义前缀格式
    
    Args:
        directory_path (str): 文件所在目录路径
        prefix (str): 用户自定义的前缀名称
    """
    # 获取目录下所有文件
    files = glob.glob(os.path.join(directory_path, "*"))
    # 过滤出文件（排除目录）并只保留jpeg文件
    files = [f for f in files if os.path.isfile(f) and f.lower().endswith('.jpeg')]
    
    # 按文件名中的数字排序
    files.sort(key=lambda x: extract_number_from_filename(os.path.basename(x)))
    
    # 重命名文件
    for index, file_path in enumerate(files, start=1):
        # 获取文件所在目录
        dir_name = os.path.dirname(file_path)
        # 生成新的文件名，序号格式为3位数字
        new_filename = f"{prefix}_{index:03d}.jpeg"
        # 构建新文件路径
        new_file_path = os.path.join(dir_name, new_filename)
        
        # 重命名文件
        os.rename(file_path, new_file_path)
        print(f"重命名: {os.path.basename(file_path)} -> {new_filename}")

if __name__ == "__main__":
    # 指定要处理的目录路径
    directory = input("请输入文件所在目录路径（直接回车默认为当前目录）: ").strip()
    if not directory:
        directory = "."
    
    # 获取用户自定义前缀
    prefix = input("请输入文件前缀名称（直接回车默认为ceber）: ").strip()
    if not prefix:
        prefix = "ceber"
    
    # 检查目录是否存在
    if not os.path.exists(directory):
        print("错误：指定的目录不存在")
    elif not os.path.isdir(directory):
        print("错误：指定路径不是一个目录")
    else:
        # 显示将要重命名的文件预览
        files = glob.glob(os.path.join(directory, "*"))
        files = [f for f in files if os.path.isfile(f) and f.lower().endswith('.jpeg')]
        files.sort(key=lambda x: extract_number_from_filename(os.path.basename(x)))
        
        if not files:
            print("目录中没有jpeg文件需要重命名")
        else:
            print(f"\n找到 {len(files)} 个文件:")
            for i, file_path in enumerate(files, start=1):
                print(f"  {i}. {os.path.basename(file_path)} -> {prefix}_{i:03d}.jpeg")
            
            confirm = input("\n确认重命名吗？(y/N): ").strip().lower()
            if confirm in ['y', 'yes']:
                try:
                    rename_files_to_custom_format(directory, prefix)
                    print("\n文件重命名完成！")
                except Exception as e:
                    print(f"重命名过程中出现错误: {e}")
            else:
                print("操作已取消")